package com.superjson.showpro.base;


import java.util.List;

/**
 * Created By zby on 12:23 2019/6/21
 * 这是基类接口的数据访问层
 *
 * @author baoya
 * @since 1.1.0
 */
public interface GenericDao<T> {

    /**
     * 获取非逻辑删除的对象
     *
     * @param objId
     * @return 如果存在，则返回当前对象，不存在，返回null
     */
    T get(final Long objId);

    /**
     * 获取非逻辑删除对象集合
     *
     * @param ids 当前以逗号分割的对象的id
     * @return
     */
    List<T> get(final String ids);

    /**
     * 获取对象，根据第二个参数可以更精细的获取非逻辑删除对象
     *
     * @param objID
     * @param isOperateNLDObj 如果为true，则被操作对象为非逻辑删除对象，否则为任何对象
     * @return
     */
    T get(final Long objID, final boolean isOperateNLDObj);

    /**
     * 新增或修改对象
     *
     * @param object
     * @return
     */
    T save(T object);

    /**
     * 修改对象
     *
     * @param object
     * @return
     */
    void update(T object);


    /**
     * 删除值为id的记录
     * 根据是否有逻辑删除标志位来决定是物理删除还是逻辑删除，如果true，则物理删除，false则逻辑删除
     *
     * @param id                 当前对象的id
     * @param isPhysicallyDelete 如果true，则物理删除，false则逻辑删除
     */
    int delete(final Long id, final boolean isPhysicallyDelete);


    /**
     * 是否存在某个未逻辑删除（not logically deleted）对象
     *
     * @param id
     * @return
     */
    boolean exists(final Long id);


}